#ifndef _BASE64_HTML_H
#define _BASE64_HTML_H
static const char *html_code_base64 = "PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgogICAgPGhlYWQ+CiAgICA8dGl0bGU+TWFzdGVyIFNlcnZpY2UgTW9uaXRvcjwvdGl0bGU+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+CiAgICA8c3R5bGU+CiAgICAgICAgYm9keS5JRV9NNywgYm9keS5JRV9NOCwgYm9keS5XaW42e2ZvbnQtZmFtaWx5OiJTZWdvZSBVSSIsIFRhaG9tYSwgVmVyZGFuYSwgQXJpYWw7fQogICAgICAgIGJvZHkuU2FmYXJpe21pbi13aWR0aDo5ODdweDt9CiAgICAgICAgYm9keS5TRl9pUGhvbmV7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0Om5vbmU7fQogICAgICAgIGJvZHkKICAgICAgICB7CiAgICAgICAgICAgIG1hcmdpbjowO2ZvbnQtZmFtaWx5OlRhaG9tYSwgVmVyZGFuYSwgQXJpYWw7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6I0ZFRkVGRTsKICAgICAgICAgICAgY29sb3I6IzMzMzsKICAgICAgICAgICAgZm9udC1zaXplOjEycHQ7CiAgICAgICAgICAgIHdpZHRoOjEwMCU7CiAgICAgICAgICAgIGhlaWdodDoxMDAlOwogICAgICAgIH0KICAgICAgICBmb3Jte21hcmdpbjowcHg7ZGlzcGxheTogaW5saW5lfQogICAgICAgICNtYWluZnJhbWV7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1jb2xvcjojRkVGRUZFO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7fQogICAgICAgICN0YXNre3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6I0Y0RkJGRjtkaXNwbGF5OmlubGluZTsKICAgICAgICAgICAgYm9yZGVyOjFweCBzb2xpZCAjODFCRUY3O3BhZGRpbmc6MHB4O2xlZnQ6MHB4O3RvcDowcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt9CiAgICAgICAgLnRhc2tsaXN0e3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNEMEU5Rjc7aGVpZ2h0OjEwMCU7fQogICAgICAgIC50YXNrdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1jb2xvcjojMkY1RkExO2NvbG9yOiNjMGMwYzA7IGhlaWdodDozMHB4O30KICAgICAgICAjdGFza3NlbGVjdHtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOiNEMEU5Rjc7Y29sb3I6IzJGNUZBMTt3aWR0aDoxMDAlO30KICAgICAgICAjdGFza2xpc3RzIC50YXNrbGlzdHN7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1jb2xvcjojRjRGQkZGO2NvbG9yOiMyRjVGQTE7fQogICAgICAgICNyZWNvcmRze3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQtY29sb3I6I0ZFRkVGRTt3aWR0aDoxMDAlO2hlaWdodDo3MDBweDt9CiAgICAgICAgLnRhc2stdGl0bGV7YmFja2dyb3VuZC1jb2xvcjojMkY1RkExO2NvbG9yOiNjMGMwYzA7aGVpZ2h0OjMwcHg7d2lkdGg6MTAwJTt9CiAgICAgICAgLnVsdGFie2xpc3Qtc3R5bGU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTt9CiAgICAgICAgLmx0YWJuYW1le2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB0O30KICAgICAgICAubHRhYntiYWNrZ3JvdW5kLWNvbG9yOiNEMEU5Rjc7Y3Vyc29yOiBwb2ludGVyO3dpZHRoOjEwMCU7fQogICAgICAgIC5sdGFiLXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I0Y0RkJGRjtjdXJzb3I6IHBvaW50ZXI7d2lkdGg6MTAwJTt9CiAgICAgICAgLmxmbmFtZXtjdXJzb3I6IHBvaW50ZXI7fQogICAgICAgIC5sdGFza3tiYWNrZ3JvdW5kLWNvbG9yOiNGNEZCRkY7Y3Vyc29yOiBwb2ludGVyO30KICAgICAgICAubHRhc2stc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojRDBFOUY3O2N1cnNvcjogcG9pbnRlcjt9CiAgICAgICAgI25vZGVmb3Jte3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjcwMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjsKICAgICAgICAgICAgYm9yZGVyOjFweCBzb2xpZCAjODFCRUY3O3BhZGRpbmc6MTBweDt6LWluZGV4Ojk5O292ZXJmbG93OmF1dG87ZGlzcGxheTpub25lO30KICAgICAgICAjdGFza2Zvcm17cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NTAwcHg7aGVpZ2h0OjUwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOwogICAgICAgICAgICBib3JkZXI6MXB4IHNvbGlkICM4MUJFRjc7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWxlZnQ6NnB4O2ZvbnQtc2l6ZToxMnB0OwogICAgICAgICAgICBjb2xvcjojMkY1RkExO3otaW5kZXg6OTk7b3ZlcmZsb3c6YXV0bztkaXNwbGF5Om5vbmU7fQogICAgICAgIC5lYWRke2NvbG9yOiM1RkI0MDQ7Zm9udC1zaXplOjEzcHQ7Zm9udC13ZWlnaHQ6Ym9sZGVyO2N1cnNvcjpwb2ludGVyO30KICAgICAgICAuZXVwZGF0ZXtjb2xvcjojRkY4MDAwO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0OmJvbGRlcjtjdXJzb3I6cG9pbnRlcjt9CiAgICAgICAgLmVkZWxldGV7Y29sb3I6I0I0MDQ1Rjtmb250LXNpemU6MTNwdDtmb250LXdlaWdodDpib2xkZXI7Y3Vyc29yOnBvaW50ZXI7fQogICAgICAgIC5ldmlld3tjb2xvcjojMDAwMGZmO2ZvbnQtc2l6ZToxM3B0O2ZvbnQtd2VpZ2h0OmJvbGRlcjtjdXJzb3I6cG9pbnRlcjt9CiAgICAgICAgLmNsb3NldHh0e2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMHB0O2NvbG9yOiNjY2NjY2M7dGV4dC1hbGlnbjpyaWdodDt9CiAgICAgICAgLm50YXNre2Rpc3BsYXk6aW5saW5lO2NvbG9yOnJlZDtmb250LXNpemU6MTJwdDt9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0Jz4KICAgICAgICAgICAgdmFyIGNocmFkZCA9ICfinJonLCBjaHJmb2xkID0gJ+KWuicsIGNocnRyZWUgPSAn4pa8JywgY2hyZWRpdD0n4pyOJywgY2hyZGVsPSfinJgnLCBjaHJ2aWV3ID0gJ+KYnCAnOwogICAgICAgICAgICB2YXIgYmFzZTY0RW5jb2RlQ2hhcnMgPSAKICAgICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwogICAgICAgICAgICB2YXIgYmFzZTY0RGVjb2RlQ2hhcnMgPSBuZXcgQXJyYXkoCiAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogICAgICAgICAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCA2MiwgLTEsIC0xLCAtMSwgNjMsCiAgICAgICAgICAgIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogICAgICAgICAgICAtMSwgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwKICAgICAgICAgICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAgICAgICAgICAgIC0xLCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLAogICAgICAgICAgICA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIC0xLCAtMSwgLTEsIC0xLCAtMSk7CiAgICAgICAgICAgIGZ1bmN0aW9uIGJhc2U2NGVuY29kZShzdHIpIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgb3V0LCBpLCBsZW47CiAgICAgICAgICAgICAgICB2YXIgYzEsIGMyLCBjMzsKCiAgICAgICAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoOwogICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICBvdXQgPSAiIjsKICAgICAgICAgICAgICAgIHdoaWxlKGkgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICBjMSA9IHN0ci5jaGFyQ29kZUF0KGkrKykgJiAweGZmOwogICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gbGVuKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdChjMSA+PiAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdCgoYzEgJiAweDMpIDw8IDQpOwogICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gIj09IjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTsKICAgICAgICAgICAgICAgICAgICBpZihpID09IGxlbikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzEgPj4gMik7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKChjMSAmIDB4Myk8PCA0KSB8ICgoYzIgJiAweEYwKSA+PiA0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKGMyICYgMHhGKSA8PCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICI9IjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGMzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTsKICAgICAgICAgICAgICAgICAgICBvdXQgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KGMxID4+IDIpOwogICAgICAgICAgICAgICAgICAgIG91dCArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKChjMSAmIDB4Myk8PCA0KSB8ICgoYzIgJiAweEYwKSA+PiA0KSk7CiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdCgoKGMyICYgMHhGKSA8PCAyKSB8ICgoYzMgJiAweEMwKSA+PjYpKTsKICAgICAgICAgICAgICAgICAgICBvdXQgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KGMzICYgMHgzRik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGJhc2U2NGRlY29kZShzdHIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBjMSwgYzIsIGMzLCBjNDsKICAgICAgICAgICAgICAgIHZhciBpLCBsZW4sIG91dDsKCiAgICAgICAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoOwogICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICBvdXQgPSAiIjsKICAgICAgICAgICAgICAgIHdoaWxlKGkgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAvKiBjMSAqLwogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgYzEgPSBiYXNlNjREZWNvZGVDaGFyc1tzdHIuY2hhckNvZGVBdChpKyspICYgMHhmZl07CiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZShpIDwgbGVuICYmIGMxID09IC0xKTsKICAgICAgICAgICAgICAgICAgICBpZihjMSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgLyogYzIgKi8KICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gYmFzZTY0RGVjb2RlQ2hhcnNbc3RyLmNoYXJDb2RlQXQoaSsrKSAmIDB4ZmZdOwogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoaSA8IGxlbiAmJiBjMiA9PSAtMSk7CiAgICAgICAgICAgICAgICAgICAgaWYoYzIgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChjMSA8PCAyKSB8ICgoYzIgJiAweDMwKSA+PiA0KSk7CgogICAgICAgICAgICAgICAgICAgIC8qIGMzICovCiAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICBjMyA9IHN0ci5jaGFyQ29kZUF0KGkrKykgJiAweGZmOwogICAgICAgICAgICAgICAgICAgICAgICBpZihjMyA9PSA2MSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICAgICAgICAgICAgICAgICAgYzMgPSBiYXNlNjREZWNvZGVDaGFyc1tjM107CiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZShpIDwgbGVuICYmIGMzID09IC0xKTsKICAgICAgICAgICAgICAgICAgICBpZihjMyA9PSAtMSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjMiAmIDBYRikgPDwgNCkgfCAoKGMzICYgMHgzQykgPj4gMikpOwoKICAgICAgICAgICAgICAgICAgICAvKiBjNCAqLwogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgYzQgPSBzdHIuY2hhckNvZGVBdChpKyspICYgMHhmZjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoYzQgPT0gNjEpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGM0ID0gYmFzZTY0RGVjb2RlQ2hhcnNbYzRdOwogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoaSA8IGxlbiAmJiBjNCA9PSAtMSk7CiAgICAgICAgICAgICAgICAgICAgaWYoYzQgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjMyAmIDB4MDMpIDw8IDYpIHwgYzQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB1dGYxNnRvOChzdHIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBvdXQsIGksIGxlbiwgYzsKICAgICAgICAgICAgICAgIG91dCA9ICIiOwogICAgICAgICAgICAgICAgbGVuID0gc3RyLmxlbmd0aDsKICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgICAgICAgICAgICAgICAgIGlmICgoYyA+PSAweDAwMDEpICYmIChjIDw9IDB4MDA3RikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IHN0ci5jaGFyQXQoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4MDdGRikgewogICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEUwIHwgKChjID4+IDEyKSAmIDB4MEYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8ICgoYyA+PiAgNikgJiAweDNGKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCAoKGMgPj4gIDApICYgMHgzRikpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweEMwIHwgKChjID4+ICA2KSAmIDB4MUYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8ICgoYyA+PiAgMCkgJiAweDNGKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB1dGY4dG8xNihzdHIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBvdXQsIGksIGxlbiwgYzsKICAgICAgICAgICAgICAgIHZhciBjaGFyMiwgY2hhcjM7CiAgICAgICAgICAgICAgICBvdXQgPSAiIjsKICAgICAgICAgICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7CiAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlKGkgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSsrKTsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2goYyA+PiA0KQogICAgICAgICAgICAgICAgICAgIHsgCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiBjYXNlIDI6IGNhc2UgMzogY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OgogICAgICAgICAgICAgICAgICAgICAgICAvLyAweHh4eHh4eAogICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gc3RyLmNoYXJBdChpLTEpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjogY2FzZSAxMzoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTEweCB4eHh4ICAgMTB4eCB4eHh4CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMHgxRikgPDwgNikgfCAoY2hhcjIgJiAweDNGKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgICAgICAgICAgICAvLyAxMTEwIHh4eHggIDEweHggeHh4eCAgMTB4eCB4eHh4CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIyID0gc3RyLmNoYXJDb2RlQXQoaSsrKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhcjMgPSBzdHIuY2hhckNvZGVBdChpKyspOwogICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAweDBGKSA8PCAxMikgfAogICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIyICYgMHgzRikgPDwgNikgfAogICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIzICYgMHgzRikgPDwgMCkpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBzdGFydF93YWl0KCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnd2FpdCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gb3Zlcl93YWl0KCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnYXV0byc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gYmFzZTY0c3RyZGVjb2RlKHN0cikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHV0Zjh0bzE2KGJhc2U2NGRlY29kZShzdHIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiB0cmltKHN0cikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oXlxzK3xccyskKS8sICIiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiByZW1vdmVFbGVtZW50KF9lbGVtZW50KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgX3BhcmVudEVsZW1lbnQgPSBfZWxlbWVudC5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgaWYoX3BhcmVudEVsZW1lbnQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX3BhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoX2VsZW1lbnQpOyAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gaGlkZUJGcmFtZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIG9uRGl2KGRpdiwgY3NzTmFtZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9IGNzc05hbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gb3V0RGl2KGRpdiwgY3NzTmFtZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9IGNzc05hbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnVuY3Rpb24gQ3JlYXRlWE1MSFRUUCgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB4bWxodHRwID0gbnVsbDsKICAgICAgICAgICAgICAgIHhtbGh0dHBPYmogPSBbIk1TWE1MMi5YbWxIdHRwLjUuMCIsIk1TWE1MMi5YbWxIdHRwLjQuMCIsCiAgICAgICAgICAgICAgICAiTVNYTUwyLlhtbEh0dHAuMy4wIiwiTVNYTUwyLlhtbEh0dHAiLCJNaWNyb3NvZnQuWG1sSHR0cCJdOwogICAgICAgICAgICAgICAgaWYod2luZG93LlhNTEh0dHBSZXF1ZXN0KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHhtbGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYod2luZG93LkFjdGl2ZVhPYmplY3QpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPHhtbGh0dHBPYmoubGVuZ3RoO2krKykgICAgCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0cnl7eG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KHhtbGh0dHBPYmpbaV0pO2JyZWFrO30KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goZSl7eG1saHR0cCA9IG51bGw7fQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ0NhbiBub3QgY3JlYXRlIFhNTEhUVFAgT2JqZWN0Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4geG1saHR0cDsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL2hpZGUgcmVzdWx0CiAgICAgICAgICAgIGZ1bmN0aW9uIGhpZGVyZXN1bHQoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBvYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzaW5mbycpOwogICAgICAgICAgICAgICAgb2JqLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgICAgICAgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlY29yZHMnKTsKICAgICAgICAgICAgICAgIG9iai5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICAgIG9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlJyk7CiAgICAgICAgICAgICAgICBvYmouaW5uZXJIVE1MID0gIiI7CiAgICAgICAgICAgICAgICBvYmogPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZXRvcCcpOwogICAgICAgICAgICAgICAgb2JqLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGlzb0RhdGVUaW1lKHRpbWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBkYXRldGltZSA9IG5ldyBEYXRlKHRpbWUgKiAxMDAwKTsKICAgICAgICAgICAgICAgIHZhciB5ZWFyID0gZGF0ZXRpbWUuZ2V0RnVsbFllYXIoKTsKICAgICAgICAgICAgICAgIHZhciBtb24gPSBkYXRldGltZS5nZXRNb250aCgpKzE7aWYocGFyc2VJbnQobW9uKSA8IDEwKSBtb24gPSAiMCIrbW9uOwogICAgICAgICAgICAgICAgdmFyIGRheSA9IGRhdGV0aW1lLmdldERhdGUoKTtpZihwYXJzZUludChkYXkpIDwgMTApIGRheSA9ICIwIitkYXk7CiAgICAgICAgICAgICAgICB2YXIgaG91ciA9IGRhdGV0aW1lLmdldEhvdXJzKCk7aWYocGFyc2VJbnQoaG91cikgPCAxMCkgaG91ciA9ICIwIitob3VyOwogICAgICAgICAgICAgICAgdmFyIG1pbiA9IGRhdGV0aW1lLmdldE1pbnV0ZXMoKTtpZihwYXJzZUludChtaW4pIDwgMTApIG1pbiA9ICIwIittaW47CiAgICAgICAgICAgICAgICB2YXIgc2VjID0gZGF0ZXRpbWUuZ2V0U2Vjb25kcygpO2lmKHBhcnNlSW50KHNlYykgPCAxMCkgc2VjID0gIjAiK3NlYzsKICAgICAgICAgICAgICAgIHJldHVybiB5ZWFyKyItIittb24rIi0iK2RheSsiICIraG91cisiOiIrbWluKyI6IitzZWM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9kaXNwbGF5CiAgICAgICAgICAgIGZ1bmN0aW9uIGRpc3BsYXkodGV4dCwgcGFnZSwgZGVidWcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBjYXRsaXN0ID0gWyLlqLHkuZAiLCLkuZDmtLsiLCLmkJ7nrJEiLCAi5Yqo55S7Iiwi5ri45oiPIiwi6Z+z5LmQIiwi5L2T6IKyIiwi56eR5oqAIiwKICAgICAgICAgICAgICAgICLnlLXlvbEiLCLotKLlr4wiLCLmlZnogrIiLCLmsb3ovaYiLCLlpbPmgKciLCLng63ngrkiLCLnlLXop4bliaciLCLljp/liJsiLCAi57u86Im6IiwiIiwiIiwiIiwKICAgICAgICAgICAgICAgICLnn60iLCLkuK0iLCLplb8iLCIiLCIiLAogICAgICAgICAgICAgICAgIumrmOa4hSIsICLpnZ7pq5jmuIUiLCAi6KeG6aKRIiwgIumfs+mikSIsICIiLCAiIiwgIiJdOwogICAgICAgICAgICAgICAgdmFyIGh0bWwgPSAiIjsKICAgICAgICAgICAgICAgIHZhciByZXMgPSBudWxsOwogICAgICAgICAgICAgICAgdmFyIGNhdGdyb3VwcyA9IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgb3BhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZScpOwogICAgICAgICAgICAgICAgdmFyIG9wYWdldG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2V0b3AnKTsKICAgICAgICAgICAgICAgIHZhciBvcmVjb3JkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWNvcmRzJyk7CiAgICAgICAgICAgICAgICB2YXIgb3Jlc2luZm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzaW5mbycpOwogICAgICAgICAgICAgICAgdmFyIHJlY29yZHMgPSBudWxsOwogICAgICAgICAgICAgICAgdmFyIGRhdGV0aW1lID0gbnVsbDsKICAgICAgICAgICAgICAgIHZhciBpID0gMCwgZnJvbSA9IDAsIHRvID0gMCwgcGFnZV9jb3VudCA9IDAsIGNhdGlkID0gMDsKICAgICAgICAgICAgICAgIHZhciBjb21tZW50cyA9ICIiOwoKICAgICAgICAgICAgICAgIGlmKChyZXMgPSBldmFsKHRleHQpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCdkaXNwbGF5cmVzPTEnKSA+PSAwKWFsZXJ0KHRleHQpOwogICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9ICI8dGV4dGFyZWEgY29scz0xMDAgcm93cz02MCA+Iit0ZXh0KyI8L3RleHRhcmVhPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIG9yZXNpbmZvLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vYWxlcnQocmVzWydjb3VudCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICLnu5Pmnpw6PHNwYW4gY2xhc3M9J2hpZ2hsaWdodCc+IityZXNbJ2NvdW50J10rIjwvc3Bhbj4iOyAKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7Jm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAi5ZG95LitOjxzcGFuIGNsYXNzPSdoaWdobGlnaHQnPiIrcmVzWyd0b3RhbCddKyI8L3NwYW4+IjsgCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIiZuYnNwOyZuYnNwOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIklP5pe26Ze0OjxzcGFuIGNsYXNzPSdoaWdobGlnaHQnPiIrcmVzWydpbyddKyI8L3NwYW4+IjsgCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIiZuYnNwOyZuYnNwOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIuaOkuW6j+aXtumXtDo8c3BhbiBjbGFzcz0naGlnaGxpZ2h0Jz4iK3Jlc1snc29ydCddKyI8L3NwYW4+IjsgCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIiZuYnNwOyZuYnNwOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIuaAu+aWh+aho+aVsDo8c3BhbiBjbGFzcz0naGlnaGxpZ2h0Jz4iK3Jlc1snZG9jdG90YWwnXSsiPC9zcGFuPiI7IAogICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICImbmJzcDsmbmJzcDsiOwogICAgICAgICAgICAgICAgICAgICAgICBpZigoY2F0Z3JvdXBzID0gcmVzWydjYXRncm91cHMnXSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcih4IGluIGNhdGdyb3VwcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9IGNhdGxpc3RbeF0rIls8Zm9udCBjb2xvcj1yZWQgPiIrY2F0Z3JvdXBzW3hdKyI8L2ZvbnQ+XSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7Jm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICImbmJzcDsmbmJzcDs8aHI+PGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIG9yZXNpbmZvLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNob3cgcmVjb3JkcyAqLwogICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNbJ2NvdW50J10gPiAwICYmIChyZWNvcmRzID0gcmVzWydyZWNvcmRzJ10pKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gIjxkaXYgc3R5bGU9J2JvcmRlcjoxcHg7Ym9yZGVyLWNvbG9yOiMwMDAwMDA7Jz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPHRhYmxlIGFsaWduPWxlZnQgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggaW4gcmVjb3JkcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcgPSByZWNvcmRzW3hdWydzdW1tYXJ5J11bJzE3J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPHRyID48dGQgd2lkdGg9MTAwID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGltZykgaHRtbCArPSAiPGltZyBzcmM9JyIraW1nKyInIGJvcmRlcj0wID4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICI8L3RkPjx0ZCB3aWR0aD04MDAgPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIlsiK3grIl0mbmJzcDsiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICLmoIfpopg6Jm5ic3A7IityZWNvcmRzW3hdWydzdW1tYXJ5J11bJzAnXSsiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAi5YWz6ZSu5a2XOiZuYnNwOyIrcmVjb3Jkc1t4XVsnc3VtbWFyeSddWycyJ10rIjxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICLmkq3mlL7mrKHmlbA6WyIrcmVjb3Jkc1t4XVsnc3VtbWFyeSddWyc2J10rIl0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICImbmJzcDsiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICLkuIrkvKDml7bpl7Q6WyIraXNvRGF0ZVRpbWUocmVjb3Jkc1t4XVsnc3VtbWFyeSddWyczJ10pKyJdIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAi6KeG6aKR5pe26ZW/OlsiK3JlY29yZHNbeF1bJ3N1bW1hcnknXVsnNCddKyJdIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAi6auY5riFOlsiK3JlY29yZHNbeF1bJ3N1bW1hcnknXVsnNSddKyJdIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPGJyPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIklEOlsiK3JlY29yZHNbeF1bJ3N1bW1hcnknXVsnOCddKyJdIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAic2NvcmU6WyIrcmVjb3Jkc1t4XVsnc2NvcmUnXSsiXSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIiZuYnNwOyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gInJhbms6WyIrcmVjb3Jkc1t4XVsncmFuayddKyJdIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0aWQgPSBwYXJzZUludChyZWNvcmRzW3hdWydzdW1tYXJ5J11bJzExJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICLpopHpgZM6WyIrY2F0bGlzdFtjYXRpZF0rIl0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICImbmJzcDsiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICLkuIrkvKDogIVJRDpbIityZWNvcmRzW3hdWydzdW1tYXJ5J11bJzknXSsiXSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIueUqOaIt+WQjTpbIityZWNvcmRzW3hdWydzdW1tYXJ5J11bJzEnXSsiXTxicj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICI8YnI+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPGhyPjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPC90YWJsZT48L2Rpdj4iOwogICAgICAgICAgICAgICAgICAgICAgICBvcmVjb3Jkcy5pbm5lckhUTUwgPSBodG1sOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvKiBwYWdpbmcgKi8KICAgICAgICAgICAgICAgICAgICBpZigodG90YWwgPSAxICogcmVzWyd0b3RhbCddKSA+IDE1KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwYWdlX2NvdW50ID0gcGFyc2VJbnQodG90YWwvMTUpOwogICAgICAgICAgICAgICAgICAgIGlmKHRvdGFsJTE1KSBwYWdlX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHBhZ2UgLSAxMDsKICAgICAgICAgICAgICAgICAgICB0byA9IHBhZ2UgKyAxMDsKICAgICAgICAgICAgICAgICAgICBpZihmcm9tIDwgMSkgZnJvbSA9IDE7CiAgICAgICAgICAgICAgICAgICAgaWYodG8gPiBwYWdlX2NvdW50KSB0byA9IHBhZ2VfY291bnQ7CiAgICAgICAgICAgICAgICAgICAgaHRtbCA9ICIiOwogICAgICAgICAgICAgICAgICAgIGlmKHBhZ2UgPiAxNSkKICAgICAgICAgICAgICAgICAgICBodG1sICs9ICI8YSBocmVmPSdqYXZhc2NyaXB0OnNvKDEpJz4xPC9hPiAgLi4uICAiOwogICAgICAgICAgICAgICAgICAgIGZvcihpID0gZnJvbTsgaSA8PSB0bzsgaSsrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihpID09IHBhZ2UpCiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBodG1sICs9ICI8YSBocmVmPSdqYXZhc2NyaXB0OnNvKCIraSsiKSc+IitpKyI8L2E+IjsKICAgICAgICAgICAgICAgICAgICBodG1sICs9ICImbmJzcDsmbmJzcDsiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZihwYWdlIDwgKHBhZ2VfY291bnQgLSAxNSkpCiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiIC4uLiAgIDxhIGhyZWY9J2phdmFzY3JpcHQ6c28oIitwYWdlX2NvdW50KyIpJz4iK3BhZ2VfY291bnQrIjwvYT4iOwogICAgICAgICAgICAgICAgICAgIG9wYWdldG9wLmlubmVySFRNTCA9IGh0bWwrIjxocj48YnI+IjsKICAgICAgICAgICAgICAgICAgICBvcGFnZS5pbm5lckhUTUwgPSAiPGJyPiIraHRtbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBhbGVydCgi5rKh5pyJ5om+5Yiw55u45YWz55qE57uT5p6cIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9zbwogICAgICAgICAgICBmdW5jdGlvbiBzbyhwYWdlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgeG1sSHR0cCA9IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgcXVlcnkgPSAiIjsKICAgICAgICAgICAgICAgIHZhciBwYWdlX251bSA9IHBhZ2U7CiAgICAgICAgICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmZvcm1zWydzZWFyY2gnXTsKICAgICAgICAgICAgICAgIHZhciBmaWVsZHNmaWx0ZXIgPSAwOwogICAgICAgICAgICAgICAgdmFyIG4gPSAwOwogICAgICAgICAgICAgICAgdmFyIGZyb20gPSAwOwogICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gMTU7CiAgICAgICAgICAgICAgICB2YXIgY2F0ZmlsdGVyID0gMDsKICAgICAgICAgICAgICAgIHZhciBvcmRlcmJ5ID0gMDsKICAgICAgICAgICAgICAgIHZhciBvcmRlciA9IDA7CiAgICAgICAgICAgICAgICB2YXIgZGF0ZXRpbWUgPSBudWxsOwogICAgICAgICAgICAgICAgdmFyIGRhdGVmcm9tID0gMDsKICAgICAgICAgICAgICAgIHZhciBkYXRldG8gPSAwOwogICAgICAgICAgICAgICAgaWYoKGZvcm0gJiYgKHF1ZXJ5ID0gZm9ybVsncXVlcnknXS52YWx1ZSkgIT0gIiIpCiAgICAgICAgICAgICAgICAmJiAoeG1sSHR0cCA9IENyZWF0ZVhNTEhUVFAoKSkgIT0gbnVsbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihwYWdlIDw9IDApIHBhZ2VfbnVtID0gMTsKICAgICAgICAgICAgICAgICAgICBmcm9tID0gKHBhZ2VfbnVtIC0gMSkgKiAxNTsKICAgICAgICAgICAgICAgICAgICBoaWRlcmVzdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVyaSA9ICIvcz8iOwogICAgICAgICAgICAgICAgICAgIHZhciBub3Rfc3RyID0gIiI7CiAgICAgICAgICAgICAgICAgICAgdXJpICs9ICJkaXNwbGF5PTAkLDEkLDIkLDMsNCw1LDYsNyw4LDksMTAsMTEsMTciOwogICAgICAgICAgICAgICAgICAgIHVyaSArPSAiJmhpdHNjYWxlPSI7CiAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAxOyBpIDw9IDMyOyBpKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JtWydoJytpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA8IDMyKXVyaSArPSBmb3JtWydoJytpXS52YWx1ZSsiLCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdXJpICs9IGZvcm1bJ2gnK2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB2YXIgc2xldmVsID0gMDsKICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgMzI7IGkrKykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1bJ3MnK2ldICYmIGZvcm1bJ3MnK2ldLmNoZWNrZWQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xldmVsIHw9IDEgPDwgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZigob3JkZXIgPSBmb3JtWydvcmRlciddLnZhbHVlKSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZvcmRlcj0iK29yZGVyOwogICAgICAgICAgICAgICAgICAgIGlmKGZvcm1bJ3BocmFzZSddLmNoZWNrZWQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgdXJpICs9ICImcGhyYXNlPTEiOwogICAgICAgICAgICAgICAgICAgIGlmKGZvcm1bJ2NhdGdyb3VwJ10uY2hlY2tlZCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZjYXRncm91cD0xIjsKICAgICAgICAgICAgICAgICAgICBpZihmb3JtWydyYW5rJ10uY2hlY2tlZCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZyYW5rPTEiOwogICAgICAgICAgICAgICAgICAgIGlmKGZvcm1bJ3JlbCddLmNoZWNrZWQpIHVyaSArPSAiJnJlbD0xIjsKICAgICAgICAgICAgICAgICAgICBpZihmb3JtWydxZnVuYyddWzBdLmNoZWNrZWQpIHVyaSArPSAiJnFmdW5jPTEiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoZm9ybVsncWZ1bmMnXVsxXS5jaGVja2VkKSB1cmkgKz0gIiZxZnVuYz0yIjsKICAgICAgICAgICAgICAgICAgICB2YXIgcWZoaXRzID0gMDsKICAgICAgICAgICAgICAgICAgICBpZihmb3JtWyd0MCddLmNoZWNrZWQpIHFmaGl0cyA9IDE7CiAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVsndDEnXS5jaGVja2VkKSBxZmhpdHMgfD0gMSA8PCAxOwogICAgICAgICAgICAgICAgICAgIGlmKGZvcm1bJ3QyJ10uY2hlY2tlZCkgcWZoaXRzIHw9IDEgPDwgMjsKICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZxZmhpdHM9IitxZmhpdHM7CiAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVsnYm9vbGFuZCddLmNoZWNrZWQgPT0gdHJ1ZSkgIHVyaSArPSAiJmJvb2xhbmQ9MSI7CiAgICAgICAgICAgICAgICAgICAgdXJpICs9ICImYmhpdHM9Iitmb3JtWydiaGl0cyddLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIHVyaSArPSAiJmJmaGl0cz0iK2Zvcm1bJ2JmaGl0cyddLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIHVyaSArPSAiJmJwaHJhc2U9Iitmb3JtWydicGhyYXNlJ10udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgdXJpICs9ICImYm50ZXJtPSIrZm9ybVsnYm50ZXJtJ10udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgdXJpICs9ICImYnhjYXR1cD0iK2Zvcm1bJ2J4Y2F0dXAnXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZieGNhdGRvd249Iitmb3JtWydieGNhdGRvd24nXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZicmFuaz0iK2Zvcm1bJ2JyYW5rJ10udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgdXJpICs9ICImcXVlcnk9IitlbmNvZGVVUkkocXVlcnkpOwogICAgICAgICAgICAgICAgICAgIGlmKChub3Rfc3RyID0gZm9ybVsnbm90X3N0ciddLnZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgdXJpICs9ICImbm90PSIrZW5jb2RlVVJJKG5vdF9zdHIpOwogICAgICAgICAgICAgICAgICAgIGlmKHNsZXZlbCAhPSAwKSB1cmkgKz0gIiZzbGV2ZWw9IitzbGV2ZWw7CiAgICAgICAgICAgICAgICAgICAgZWxzZSB1cmkgKz0gIiZzbGV2ZWw9LTEiOwogICAgICAgICAgICAgICAgICAgIGlmKChmaWVsZHNmaWx0ZXIgPSBmb3JtWydmaWVsZHNmaWx0ZXInXS52YWx1ZSkgPiAwKQogICAgICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZmaWVsZHNmaWx0ZXI9IitmaWVsZHNmaWx0ZXI7CiAgICAgICAgICAgICAgICAgICAgaWYoKG4gPSBmb3JtWydjYXRmaWx0ZXInXS52YWx1ZSkgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZmlsdGVyIHw9ICgxIDw8IG4qMSk7CiAgICAgICAgICAgICAgICAgICAgaWYoKG4gPSBmb3JtWyd0aW1lcyddLnZhbHVlKSA+PSAwKQogICAgICAgICAgICAgICAgICAgICAgICBjYXRmaWx0ZXIgfD0gKDEgPDwgbioxKTsKICAgICAgICAgICAgICAgICAgICBpZihmb3JtWydoMjY0J10uY2hlY2tlZCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICBjYXRmaWx0ZXIgfD0gKDEgPDwgMjUqMSk7CiAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZmlsdGVyKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdXJpICs9ICImY2F0ZmlsdGVyPSIrY2F0ZmlsdGVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZigob3JkZXJieSA9IGZvcm1bJ29yZGVyYnknXS52YWx1ZSkgPiAwKQogICAgICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZvcmRlcmJ5PSIrb3JkZXJieTsKICAgICAgICAgICAgICAgICAgICB2YXIgeHVwID0gMCwgeGRvd24gPSAwOwogICAgICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDMyOyBpKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtWyd4JytpXSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVsneCcraV1bMF0uY2hlY2tlZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dXAgfD0gMSA8PCBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihmb3JtWyd4JytpXVsxXS5jaGVja2VkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhkb3duIHw9IDEgPDwgaTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB1cmkgKz0gIiZ4dXA9Iit4dXArIiZ4ZG93bj0iK3hkb3duOwogICAgICAgICAgICAgICAgICAgIGlmKChmb3JtWydkYXRlZnJvbSddLnZhbHVlKSB8fCAoZm9ybVsnZGF0ZXRvJ10udmFsdWUpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVsnZGF0ZWZyb20nXS52YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUgPSBuZXcgRGF0ZShmb3JtWydkYXRlZnJvbSddLnZhbHVlKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlZnJvbSA9ICBkYXRldGltZS5nZXRUaW1lKCkvMTAwMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtWydkYXRldG8nXS52YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUgPSBuZXcgRGF0ZShmb3JtWydkYXRldG8nXS52YWx1ZSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRvID0gIGRhdGV0aW1lLmdldFRpbWUoKS8xMDAwOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGV0byAmJiBkYXRldG8gPCBkYXRlZnJvbSkgCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCLml7bpl7TojIPlm7TkuI3op4TojIMs57uI5q2i5pe26Ze05b+F6aG75aSn5LqO6LW35aeL5pe26Ze0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHVyaSArPSAiJnJhbmdlZmlsdGVyPTM6WyIrZGF0ZWZyb20rIiwiK2RhdGV0bysiXSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHVyaSArPSAiJmZyb209Iitmcm9tKyImY291bnQ9MTUiOwogICAgICAgICAgICAgICAgICAgIGlmKGZvcm1bJ2RlYnVnJ10uY2hlY2tlZCA9PSB0cnVlKSB1cmkgKz0gIiZkZWJ1Zz0xIgogICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2Rpc3BsYXl1cmk9MScpID49IDApYWxlcnQodXJpKTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9wZW4oJ0dFVCcsIHVyaSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgLy94bWxIdHRwLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgYXJndi5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgIC8veG1sSHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoeG1sSHR0cC5yZWFkeVN0YXRlPT00KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4bWxIdHRwLnN0YXR1cyA9PSAyMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSh4bWxIdHRwLnJlc3BvbnNlVGV4dCwgcGFnZV9udW0sIGZvcm1bJ2RlYnVnJ10uY2hlY2tlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZW5kKCk7CiAgICAgICAgICAgICAgICB9ZWxzZSBhbGVydCgi6K+36L6T5YWl5YWz6ZSu6K+NIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9jbG9zZSBmb3JtCiAgICAgICAgICAgIGZ1bmN0aW9uIENsb3NlVGhpcyhlbGVtZW50KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vaGlkZGVuIE5vZGVGb3JtCiAgICAgICAgICAgIGZ1bmN0aW9uIEhpZGVOb2RlZm9ybSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm9kZWZvcm0nKTsKICAgICAgICAgICAgICAgIGlmKGRpdilkaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICAgIHZhciBub2RlbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub2RlbGlzdHMnKTsKICAgICAgICAgICAgICAgIGlmKG5vZGVsaXN0KSBub2RlbGlzdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIE5vZGVYQWRkKGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50OwogICAgICAgICAgICAgICAgdmFyIHggPSBlLmNsaWVudFggKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7CiAgICAgICAgICAgICAgICB2YXIgeSA9IGUuY2xpZW50WSArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOwogICAgICAgICAgICAgICAgdmFyIFhkaXYgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vZGVmb3JtIik7CiAgICAgICAgICAgICAgICBYZGl2LnN0eWxlLmxlZnQgPSB4OwogICAgICAgICAgICAgICAgWGRpdi5zdHlsZS50b3AgPSB5ICsgMTA7CiAgICAgICAgICAgICAgICBYZGl2LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKICAgICAgICAgICAgICAgIC8vb3ZlckJGcmFtZShYZGl2KTsKICAgICAgICAgICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuZm9ybXNbIm5vZGVmb3JtIl07CiAgICAgICAgICAgICAgICBmb3JtWydvcCddLnZhbHVlID0gMTsKICAgICAgICAgICAgICAgIGZvcm1bJ2xpbWl0J10udmFsdWUgPSAyNTY7CiAgICAgICAgICAgICAgICBmb3JtWydpcCddLmZvY3VzKCk7CiAgICAgICAgICAgICAgICBmb3JtWydpcCddLnZhbHVlID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9saXN0IG5vZGVzIAogICAgICAgICAgICBmdW5jdGlvbiBMaXN0Tm9kZXModHh0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgbm9kZWxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm9kZWxpc3RzJyk7CiAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPSBudWxsOwogICAgICAgICAgICAgICAgdmFyIHJlcyA9IG51bGw7CiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9ICIiLCBjc3MgPSAiIjsKICAgICAgICAgICAgICAgIGlmKHR4dCAmJiAocmVzID0gZXZhbCh0eHQpKSAmJiBub2RlbGlzdCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBub2RlbGlzdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICAgICAgICBpZigobm9kZXMgPSByZXNbJ25vZGVzJ10pICYmIHJlc1snY291bnQnXSA+IDApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9ICI8dWwgY2xhc3M9J3VsdGFiJz4iOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IoeCBpbiBub2RlcykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbWl0ID0gbm9kZXNbeF1bJ2xpbWl0J107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXAgPSBub2Rlc1t4XVsnaXAnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3J0ID0gbm9kZXNbeF1bJ3BvcnQnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RldHlwZSA9IG5vZGVzW3hdWyd0eXBlJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICI8bGkgY2xhc3M9J2x0YWInIG9ubW91c2Vtb3ZlPVwib25EaXYodGhpcywgJ2x0YWItc2VsZWN0ZWQnKVwiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIiBvbm1vdXNlb3V0PVwib3V0RGl2KHRoaXMsICdsdGFiJylcIiA+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxmb3JtIHN0eWxlPScnIGFjdGlvbj0namF2YXNjcmlwdDp2b2lkKDApJyAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiIG9uc3VibWl0PSdyZXR1cm4gTm9kZUVkaXQodGhpcyk7Jz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub2RldHlwZSA9PSAxKSBodG1sICs9ICJQYXJzZXJbIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobm9kZXR5cGUgPT0gMikgaHRtbCArPSAiRG9jWyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICBodG1sICs9ICJJbmRleFsiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBpcCsiOiIrcG9ydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIl0mbmJzcDsiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J25vZGVpZCcgdmFsdWU9JyIreCsiJz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J29wJyB2YWx1ZT0nNCc+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nbGltaXQnIHNpemU9NiB2YWx1ZT0nIitsaW1pdCsiJz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiJm5ic3A7Jm5ic3A7IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIjxzcGFuIGNsYXNzPSdlZGVsZXRlJyB0aXRsZT0nRGVsZXRlJyAiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiIG9uY2xpY2s9XCJOb2RlRGVsKCIreCsiKVwiPiIrY2hyZGVsKyI8L3NwYW4+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gIjwvZm9ybT48L2xpPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAiPC91bD4iOwogICAgICAgICAgICAgICAgICAgICAgICBub2RlbGlzdC5pbm5lckhUTUwgPSBodG1sOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KHR4dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9saXN0IAogICAgICAgICAgICBmdW5jdGlvbiBsaXN0KCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHhtbEh0dHAgPSBudWxsOwogICAgICAgICAgICAgICAgaWYoKHhtbEh0dHAgPSBDcmVhdGVYTUxIVFRQKCkpICE9IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSGlkZU5vZGVmb3JtKCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3YgPSAib3A9OCI7CiAgICAgICAgICAgICAgICAgICAgLy9hbGVydChhcmd2KTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9wZW4oJ1BPU1QnLCAnLycsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIHhtbEh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1MZW5ndGgiLCBhcmd2Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoeG1sSHR0cC5yZWFkeVN0YXRlPT00KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4bWxIdHRwLnN0YXR1cyA9PSAyMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdE5vZGVzKHhtbEh0dHAucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLnNlbmQoYXJndik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9jaGFuZ2UgcG9ydAogICAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2VQb3J0KGZvcm0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBpID0gMDsKICAgICAgICAgICAgICAgIHZhciBwb3J0bGlzdCA9IFsiMCIsICIzNTE1IiwgIjM4MjQiLCAiIiwgIjM3MjEiXTsKICAgICAgICAgICAgICAgIHZhciBia3BvcnRsaXN0ID0gWyIwIiwgIjMxMDMiLCAiMzQxMiIsICIiLCAiMzMwOSJdOwogICAgICAgICAgICAgICAgdmFyIG8gPSBmb3JtCiAgICAgICAgICAgICAgICBpZihmb3JtICYmIChvID0gZm9ybVsndHlwZSddKSAmJiAoaSA9IG8ub3B0aW9uc1tvLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSA+IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZm9ybVsncG9ydCddLnZhbHVlID0gcG9ydGxpc3RbaV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9hZGQKICAgICAgICAgICAgZnVuY3Rpb24gTm9kZUVkaXQoZm9ybSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHhtbEh0dHAgPSBudWxsOwogICAgICAgICAgICAgICAgdmFyIGlwID0gIiI7CiAgICAgICAgICAgICAgICB2YXIgbm9kZXR5cGUgPSAtMTsKICAgICAgICAgICAgICAgIHZhciBub2RlaWQgPSAtMTsKICAgICAgICAgICAgICAgIHZhciBwb3J0ID0gLTE7CiAgICAgICAgICAgICAgICB2YXIgbGltaXQgPSAtMTsKICAgICAgICAgICAgICAgIHZhciBhcmd2ID0gIiI7CiAgICAgICAgICAgICAgICBpZihmb3JtICYmIChvcCA9IGZvcm1bJ29wJ10udmFsdWUpID4gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZihvcCA9PSAxICYmIChub2RldHlwZSA9IGZvcm1bJ3R5cGUnXS52YWx1ZSkgPiAwCiAgICAgICAgICAgICAgICAgICAgICAgICYmIChsaW1pdCA9IGZvcm1bJ2xpbWl0J10udmFsdWUpID4gMAogICAgICAgICAgICAgICAgICAgICAgICAmJiAoaXAgPSBmb3JtWydpcCddLnZhbHVlKSAhPSAiIiAKICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBvcnQgPSBmb3JtWydwb3J0J10udmFsdWUpID4gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3YgPSAib3A9MSZpcD0iK2lwKyImcG9ydD0iK3BvcnQrIiZ0eXBlPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICtub2RldHlwZSsiJmxpbWl0PSIrbGltaXQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYob3AgPT0gNCAmJiAobm9kZWlkID0gZm9ybVsnbm9kZWlkJ10udmFsdWUpID49IDAgCiAgICAgICAgICAgICAgICAgICAgICAgICYmIChsaW1pdCA9IGZvcm1bJ2xpbWl0J10udmFsdWUpID4gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3YgPSAib3A9NCZub2RlaWQ9Iitub2RlaWQrIiZsaW1pdD0iK2xpbWl0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH1lbHNlIGFsZXJ0KCLor7fovpPlhaXmraPnoa7nmoTmlbDmja4iKTsKICAgICAgICAgICAgICAgIGlmKGFyZ3YgJiYgKHhtbEh0dHAgPSBDcmVhdGVYTUxIVFRQKCkpICE9IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgSGlkZU5vZGVmb3JtKCk7CiAgICAgICAgICAgICAgICAgICAgLy9hbGVydChhcmd2KTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9wZW4oJ1BPU1QnLCAnLycsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIHhtbEh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1MZW5ndGgiLCBhcmd2Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoeG1sSHR0cC5yZWFkeVN0YXRlPT00KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4bWxIdHRwLnN0YXR1cyA9PSAyMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdE5vZGVzKHhtbEh0dHAucmVzcG9uc2VUZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLnNlbmQoYXJndik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9kZWwgbm9kZQogICAgICAgICAgICBmdW5jdGlvbiBOb2RlRGVsKG5vZGVpZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIGFyZ3YgPSAib3A9MiZub2RlaWQ9Iitub2RlaWQ7CiAgICAgICAgICAgICAgICBpZihhcmd2ICYmIGNvbmZpcm0oIuehruiupOWIoOmZpOivpeiKgueCuT8iKSAmJiAoeG1sSHR0cCA9IENyZWF0ZVhNTEhUVFAoKSkgIT0gbnVsbCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBIaWRlTm9kZWZvcm0oKTsKICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGFyZ3YpOwogICAgICAgICAgICAgICAgICAgIHhtbEh0dHAub3BlbignUE9TVCcsICcvJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIGFyZ3YubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZih4bWxIdHRwLnJlYWR5U3RhdGU9PTQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHhtbEh0dHAuc3RhdHVzID09IDIwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0Tm9kZXMoeG1sSHR0cC5yZXNwb25zZVRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHhtbEh0dHAuc2VuZChhcmd2KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBjbGVhcl9jYWNoZShvYmopCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgeG1saHR0cCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVyaSA9ICJvcD0xNiI7CiAgICAgICAgICAgICAgICAgICAgaWYoKHhtbEh0dHAgPSBDcmVhdGVYTUxIVFRQKCkpICE9IG51bGwpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBvYmouZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9wZW4oJ1BPU1QnLCAiLyIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgdXJpLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHhtbEh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHhtbEh0dHAucmVhZHlTdGF0ZT09NCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih4bWxIdHRwLnN0YXR1cyA9PSAyMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5pON5L2c5oiQ5YqfISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmouZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZW5kKHVyaSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgYWxlcnQoIuivt+axguWksei0pSEiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmdW5jdGlvbiBvcGVyYXRpb25zKG9iaikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHhtbGh0dHAgPSBudWxsOwogICAgICAgICAgICAgICAgdmFyIHVyaSA9ICIiOwogICAgICAgICAgICAgICAgaWYob2JqLnZhbHVlID09ICfmmoLlgZwnKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG9iai52YWx1ZSA9ICfmgaLlpI0nOwogICAgICAgICAgICAgICAgICAgIHVyaSA9ICJvcD0zMiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKG9iai52YWx1ZSA9PSAn5oGi5aSNJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB1cmkgPSAib3A9NjQiOwogICAgICAgICAgICAgICAgICAgIG9iai52YWx1ZSA9ICfmmoLlgZwnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoKHhtbEh0dHAgPSBDcmVhdGVYTUxIVFRQKCkpICE9IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb2JqLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9wZW4oJ1BPU1QnLCAiLyIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIHhtbEh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1MZW5ndGgiLCB1cmkubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZih4bWxIdHRwLnJlYWR5U3RhdGU9PTQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHhtbEh0dHAuc3RhdHVzID09IDIwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgi5pON5L2c5oiQ5YqfISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHhtbEh0dHAuc2VuZCh1cmkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBhbGVydCgi6K+35rGC5aSx6LSlISIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpc3QoKTsKICAgICAgICA8L3NjcmlwdD4KICAgIDwvaGVhZD4KICAgIDwhLS0gPGJvZHkgb25sb2FkPSdqYXZhc2NyaXB0OmxvYWRJbml0KCk7Jz4gLS0+CiAgICA8Ym9keSBhbGlnbj1jZW50ZXIgPgogICAgPGRpdiBpZD0nbWFpbmZyYW1lJz4KICAgIDxkaXYgaWQ9J3Rhc2snPgogICAgICAgIDxkaXYgaWQ9dGFzay1oZWFkZXIgPjwvZGl2PgogICAgICAgICAgICA8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBjZWxsc3BhY2luZz0wIGJvcmRlcj0wIHZhbGlnbj10b3AgYWxpZ249bGVmdCA+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSd0YXNrbGlzdCcgdmFsaWduPXRvcCB3aWR0aD0zMDAgaGVpZ2h0PTEwMCUgPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9MCBib3JkZXI9MCB2YWxpZ249dG9wIGFsaWduPWxlZnQgd2lkdGg9MTAwJSA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj10b3AgY2xhc3M9J3Rhc2t0aXRsZScgd2lkdGg9MTAwJSA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg54K55Ye7PHNwYW4gY2xhc3M9J2VhZGQnIHRpdGxlPSdBZGQnIG9uY2xpY2s9J05vZGVYQWRkKGV2ZW50KSc+IOKcmiA8L3NwYW4+5re75YqgKOajgOe0oi/mlofmoaMp6IqC54K5PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPXRvcCB3aWR0aD0xMDAlID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSdub2RlbGlzdHMnPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9MTAwJSA+CiAgICAgICAgICAgICAgICA8dGFibGUgdmFsaWduPXRvcCBoZWlnaHQ9MTAwJSB3aWR0aD0xMDAlPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PTEwMCB2YWxpZ249dG9wIGNsYXNzPSd0YXNrdGl0bGUnPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIG5hbWU9c2VhcmNoIGFjdGlvbj0namF2YXNjcmlwdDp2b2lkKDApJyBvbnN1Ym1pdD0icmV0dXJuIHNvKDEpOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0nY2F0ZmlsdGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Jy0xJyBzZWxlY3RlZD7pgInmi6nliIbnsbs8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzAnID7lqLHkuZA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzEnID7kuZDmtLs8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzInID7mkJ7nrJE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzMnID7liqjnlLs8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzQnID7muLjmiI88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzUnID7pn7PkuZA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzYnID7kvZPogrI8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzcnID7np5HmioA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzgnID7nlLXlvbE8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzknID7otKLlr4w8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzEwJyA+5pWZ6IKyPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPScxMScgPuaxvei9pjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nMTInID7lpbPmgKc8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzEzJyA+54Ot54K5PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPScxNCcgPueUteinhuWJpzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nMTUnID7ljp/liJs8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzE2JyA+57u86Im6PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9J3RpbWVzJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Jy0xJyBzZWxlY3RlZD7pgInmi6nml7bplb88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzIwJyA+55+tPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPScyMScgPuS4rTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nMjInID7plb88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0nZmllbGRzZmlsdGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nLTEnIHNlbGVjdGVkPumAieaLqeWtl+autTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPScxJz7moIfpopg8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nMic+55So5oi35ZCNPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzQnPnRhZ3M8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAmbmJzcDsKICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9J29yZGVyYnknPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSctMScgc2VsZWN0ZWQ+5o6S5bqP5a2X5q61PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzMnPuS4iuS8oOaXtumXtDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSc0Jz7op4bpopHml7bplb88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nNic+5pKt5pS+5qyh5pWwPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSdvcmRlcic+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Jy0xJyBzZWxlY3RlZD7pmY3luo88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nMSc+5Y2H5bqPPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0naDI2NCc+6auY5riFCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0ncGhyYXNlJyBjaGVja2VkPuWPpeWtkOajgOe0ogogICAgICAgICAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J2NhdGdyb3VwJyBjaGVja2VkPuiBmuexuwogICAgICAgICAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3JhbmsnIGNoZWNrZWQ+UmFuawogICAgICAgICAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgICAgICAgICAgIOWRveS4reWKoOadgzo8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSd0MCcgY2hlY2tlZD7moIfpopgKICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSd0MSc+55So5oi35ZCNCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0ndDInPnRhZ3MKICAgICAgICAgICAgICAgICAgICAmbmJzcDsKICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1idXR0b24gbmFtZT0nY2xlYXJjYWNoZScgb25jbGljaz0iY2xlYXJfY2FjaGUodGhpcykiIHZhbHVlPSfmuIXpmaTnvJPlrZgnPgogICAgICAgICAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWJ1dHRvbiBuYW1lPSdvcHMnIG9uY2xpY2s9Im9wZXJhdGlvbnModGhpcykiIHZhbHVlPSfmmoLlgZwnPgogICAgICAgICAgICAgICAgICAgIDxocj4KICAgICAgICAgICAgICAgICAgICDml7bpl7TojIPlm7Q65LuOPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdkYXRlZnJvbScgc2l6ZT0xNiA+Jm5ic3A75YiwJm5ic3A7PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdkYXRldG8nIHNpemU9MTYgPijmoLzlvI86MjAxMC0wNS0xMCkKICAgICAgICAgICAgICAgICAgICA8aHI+CiAgICAgICAgICAgICAgICAgICAg5o6S5bqP5LyY5YWIOgogICAgICAgICAgICAgICAgICAgIOWoseS5kFs8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MCc+4oaRPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDAnPuKGk10KICAgICAgICAgICAgICAgICAgICDkuZDmtLtbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDEnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gxJz7ihpNdCiAgICAgICAgICAgICAgICAgICAg5pCe56yRWzxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gyJz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4Mic+4oaTXQogICAgICAgICAgICAgICAgICAgIOWKqOeUu1s8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4Myc+4oaRPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDMnPuKGk10KICAgICAgICAgICAgICAgICAgICDmuLjmiI9bPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDQnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3g0Jz7ihpNdCiAgICAgICAgICAgICAgICAgICAg6Z+z5LmQWzxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3g1Jz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4NSc+4oaTXQogICAgICAgICAgICAgICAgICAgIOS9k+iCsls8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4Nic+4oaRPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDYnPuKGk10KICAgICAgICAgICAgICAgICAgICDnp5HmioBbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDcnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3g3Jz7ihpNdCiAgICAgICAgICAgICAgICAgICAgPGJyLz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICDnlLXlvbFbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDgnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3g4Jz7ihpNdCiAgICAgICAgICAgICAgICAgICAg6LSi5a+MWzxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3g5Jz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4OSc+4oaTXQogICAgICAgICAgICAgICAgICAgIOaVmeiCsls8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MTAnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gxMCc+4oaTXQogICAgICAgICAgICAgICAgICAgIOaxvei9pls8aW5wdXQgdHlwZT1yYWRpbyBzaXplPTEgbmFtZT0neDExJz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MTEnPuKGk10KICAgICAgICAgICAgICAgICAgICDlpbPmgKdbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDEyJz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MTInPuKGk10KICAgICAgICAgICAgICAgICAgICDng63ngrlbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDEzJz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MTMnPuKGk10KICAgICAgICAgICAgICAgICAgICDnlLXop4bliadbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDE0Jz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MTQnPuKGk10KICAgICAgICAgICAgICAgICAgICDljp/liJtbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDE1Jz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MTUnPuKGk10KICAgICAgICAgICAgICAgICAgICDnu7zoibpbPGlucHV0IHR5cGU9cmFkaW8gbmFtZT0neDE2Jz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MTYnPuKGk10KICAgICAgICAgICAgICAgICAgICA8YnIvPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICAgICAgICAgICAgICAgIOefrVs8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjAnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gyMCc+4oaTXQogICAgICAgICAgICAgICAgICAgIOS4rVs8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjEnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gyMSc+4oaTXQogICAgICAgICAgICAgICAgICAgIOmVv1s8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjInPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gyMic+4oaTXQogICAgICAgICAgICAgICAgICAgIOmrmOa4hVs8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjUnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gyNSc+4oaTXQogICAgICAgICAgICAgICAgICAgIOmdnumrmOa4hVs8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjYnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gyNic+4oaTXQogICAgICAgICAgICAgICAgICAgIOinhumikVs8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjcnPuKGkTxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9J3gyNyc+4oaTXQogICAgICAgICAgICAgICAgICAgIOmfs+mikVs8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjgnIHZhbHVlPScxJz7ihpE8aW5wdXQgdHlwZT1yYWRpbyBuYW1lPSd4MjgnIGNoZWNrZWQ9dHJ1ZT7ihpNdCiAgICAgICAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICAgICAgICDlronmo4DnuqfliKs6CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0nczAnIGNoZWNrZWQ+MAogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3MxJyBjaGVja2VkPjEKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMicgY2hlY2tlZD4yCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0nczMnIGNoZWNrZWQ+MwogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3M0JyBjaGVja2VkPjE3CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0nczUnIGNoZWNrZWQ+MTkKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzNicgY2hlY2tlZD4yMAogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3M3JyBjaGVja2VkPjIxCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0nczgnIGNoZWNrZWQ+MjIKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzOScgY2hlY2tlZD4yMwogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3MxMCcgY2hlY2tlZD4yNgogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3MxMScgY2hlY2tlZD4yNwogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3MxMicgY2hlY2tlZD4yOAogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3MxMycgY2hlY2tlZD4yOQogICAgICAgICAgICAgICAgICAgICZuYnNwOzxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J3MxNCcgY2hlY2tlZD4zMAogICAgICAgICAgICAgICAgICAgIDxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMTUnIGNoZWNrZWQ+MzEKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMTYnIGNoZWNrZWQ+MjQKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMTcnIGNoZWNrZWQ+MzYKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMTgnIGNoZWNrZWQ+MzcKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMTknIGNoZWNrZWQ+MzgKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjAnIGNoZWNrZWQ+MzkKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjEnIGNoZWNrZWQ+NDAKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjInIGNoZWNrZWQ+NDEKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjMnIGNoZWNrZWQ+NDIKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjQnIGNoZWNrZWQ+NDMKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjUnIGNoZWNrZWQ+NDQKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjYnIGNoZWNrZWQ+NDUKICAgICAgICAgICAgICAgICAgICAmbmJzcDs8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdzMjcnIGNoZWNrZWQ+NDYKICAgICAgICAgICAgICAgICAgICA8aHI+CiAgICAgICAgICAgICAgICDlkb3kuK3mjqfliLY6CiAgICAgICAgICAgICAgICAxOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMSB2YWx1ZT0nMCcgc2l6ZT0xPgogICAgICAgICAgICAgICAgMjo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDIgdmFsdWU9JzUwJyBzaXplPTE+CiAgICAgICAgICAgICAgICAzOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMyB2YWx1ZT0nNTUnIHNpemU9MT4KICAgICAgICAgICAgICAgIDQ6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWg0IHZhbHVlPSc1NScgc2l6ZT0xPgogICAgICAgICAgICAgICAgNTo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDUgdmFsdWU9JzYwJyBzaXplPTE+CiAgICAgICAgICAgICAgICA2OjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oNiB2YWx1ZT0nNjAnIHNpemU9MT4KICAgICAgICAgICAgICAgIDc6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWg3IHZhbHVlPSc2NScgc2l6ZT0xPgogICAgICAgICAgICAgICAgODo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDggdmFsdWU9JzY1JyBzaXplPTE+CiAgICAgICAgICAgICAgICA5OjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oOSB2YWx1ZT0nNzAnIHNpemU9MT4KICAgICAgICAgICAgICAgIDEwOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMTAgdmFsdWU9JzcwJyBzaXplPTE+CiAgICAgICAgICAgICAgICAxMTo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDExIHZhbHVlPSc3NScgc2l6ZT0xPgogICAgICAgICAgICAgICAgMTI6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWgxMiB2YWx1ZT0nNzUnIHNpemU9MT4KICAgICAgICAgICAgICAgIDEzOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMTMgdmFsdWU9Jzc1JyBzaXplPTE+CiAgICAgICAgICAgICAgICAxNDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDE0IHZhbHVlPSc3NScgc2l6ZT0xPgogICAgICAgICAgICAgICAgMTU6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWgxNSB2YWx1ZT0nODAnIHNpemU9MT4KICAgICAgICAgICAgICAgIDE2OjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMTYgdmFsdWU9JzgwJyBzaXplPTE+CiAgICAgICAgICAgICAgICAxNzo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDE3IHZhbHVlPSc4MCcgc2l6ZT0xPgogICAgICAgICAgICAgICAgMTg6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWgxOCB2YWx1ZT0nODAnIHNpemU9MT4KICAgICAgICAgICAgICAgIDxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgIDE5OjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMTkgdmFsdWU9JzgwJyBzaXplPTE+CiAgICAgICAgICAgICAgICAyMDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDIwIHZhbHVlPSc4MCcgc2l6ZT0xPgogICAgICAgICAgICAgICAgMjE6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWgyMSB2YWx1ZT0nODAnIHNpemU9MT4KICAgICAgICAgICAgICAgIDIyOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMjIgdmFsdWU9Jzg1JyBzaXplPTE+CiAgICAgICAgICAgICAgICAyMzo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDIzIHZhbHVlPSc4NScgc2l6ZT0xPgogICAgICAgICAgICAgICAgMjQ6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWgyNCB2YWx1ZT0nODUnIHNpemU9MT4KICAgICAgICAgICAgICAgIDI1OjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMjUgdmFsdWU9Jzg1JyBzaXplPTE+CiAgICAgICAgICAgICAgICAyNjo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDI2IHZhbHVlPSc4NScgc2l6ZT0xPgogICAgICAgICAgICAgICAgMjc6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWgyNyB2YWx1ZT0nODUnIHNpemU9MT4KICAgICAgICAgICAgICAgIDI4OjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMjggdmFsdWU9JzkwJyBzaXplPTE+CiAgICAgICAgICAgICAgICAyOTo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDI5IHZhbHVlPSc5MCcgc2l6ZT0xPgogICAgICAgICAgICAgICAgMzA6PGlucHV0IHR5cGU9dGV4dCBuYW1lPWgzMCB2YWx1ZT0nOTAnIHNpemU9MT4KICAgICAgICAgICAgICAgIDMxOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1oMzEgdmFsdWU9Jzk1JyBzaXplPTE+CiAgICAgICAgICAgICAgICAzMjo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aDMyIHZhbHVlPScxMDAnIHNpemU9MT4KICAgICAgICAgICAgICAgIDxocj4KICAgICAgICAgICAgICAgIOaJk+WIhuWfuuaVsDoKICAgICAgICAgICAgICAgIOWRveS4reaJk+WIhjo8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTEgc2l6ZT0xIG5hbWU9ImJoaXRzIiA+Jm5ic3A7CiAgICAgICAgICAgICAgICDmoIfpopjlkb3kuK06PGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0yMCBzaXplPTEgbmFtZT0iYmZoaXRzIiA+Jm5ic3A7CiAgICAgICAgICAgICAgICDlj6XlrZDlkb3kuK06PGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0xIHNpemU9MSBuYW1lPSJicGhyYXNlIiA+Jm5ic3A7CiAgICAgICAgICAgICAgICDlj6XlrZDor43plb86PGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0xIHNpemU9MSBuYW1lPSJibnRlcm0iID4mbmJzcDsKICAgICAgICAgICAgICAgIOWIhuexu+WKoOadgzo8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTUwIHNpemU9MSBuYW1lPSJieGNhdHVwIiA+Jm5ic3A7CiAgICAgICAgICAgICAgICDliIbnsbvpmY3mnYM6PGlucHV0IHR5cGU9dGV4dCB2YWx1ZT0yMDAgc2l6ZT0xIG5hbWU9ImJ4Y2F0ZG93biIgPiZuYnNwOwogICAgICAgICAgICAgICAgcmFua+WfuuaVsDo8aW5wdXQgdHlwZT10ZXh0IHZhbHVlPTEwMDAwMDAwIHNpemU9MTAgbmFtZT0iYnJhbmsiID4mbmJzcDsKICAgICAgICAgICAgICAgIDxocj4KICAgICAgICAgICAgICAgICAgICDmjpLluo/mlrnms5U6CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PGlucHV0IHR5cGU9cmFkaW8gbmFtZT0ncWZ1bmMnIHZhbHVlPScxJyBjaGVja2VkPXRydWU+YmluYXJ5CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PGlucHV0IHR5cGU9cmFkaW8gbmFtZT0ncWZ1bmMnIHZhbHVlPScyJz54dHJlZQogICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwO+ebuOWFs+aAp+iuoeeulzo8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSdyZWwnIGNoZWNrZWQ+CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A75a6M5YWo5Yy56YWNOjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9J2Jvb2xhbmQnIGNoZWNrZWQ+CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7ZGVidWc6PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0nZGVidWcnPgogICAgICAgICAgICAgICAgICAgIDxocj4KICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICDmg7Pmn6Xmib46PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdxdWVyeScgc2l6ZT00OCA+CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAg5LiN5YyF5ZCrOjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nbm90X3N0cicgc2l6ZT0xNiA+CiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9c3VibWl0IHR5cGU9c3VibWl0IHZhbHVlPSfmib4nPjxicj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0yMDAgPjxkaXYgaWQ9J3Jlc2luZm8nID48L2Rpdj48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9NDAgPjxkaXYgaWQ9J3BhZ2V0b3AnID48L2Rpdj48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSdyZWNvcmRzJyA+PC9kaXY+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD00MD48ZGl2IGlkPSdwYWdlJyA+PC9kaXY+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDxocj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSdub2RlZm9ybSc+CiAgICAgICAgPGZvcm0gbmFtZT0nbm9kZWZvcm0nIGFjdGlvbj0namF2YXNjcmlwdDp2b2lkKDApOycgb25zdWJtaXQ9J3JldHVybiBOb2RlRWRpdCh0aGlzKTsnPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0nY2xvc2V0eHQnIG9uY2xpY2s9IkNsb3NlVGhpcyh0aGlzKSIgPuWFs+mXrTwvc3Bhbj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J29wJyB2YWx1ZT0xID4KICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J25vZGVpZCcgdmFsdWU9LTEgPgogICAgICAgICAgICA8c2VsZWN0IG5hbWU9J3R5cGUnIG9uY2hhbmdlPSJjaGFuZ2VQb3J0KHRoaXMuZm9ybSk7Ij4KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Jy0xJyBzZWxlY3RlZD7pgInmi6nnsbvliKs8L29wdGlvbj4KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzEnID5QYXJzZXJOb2RlPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPScyJyA+RG9jTm9kZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nNCcgPkluZGV4Tm9kZTwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4gCiAgICAgICAgICAgICZuYnNwOyZuYnNwOwogICAgICAgICAgICBJUDo8aW5wdXQgdHlwZT10ZXh0IHNpemU9MjAgbmFtZT0naXAnID46PGlucHV0IHR5cGU9dGV4dCBzaXplPTggbmFtZT0ncG9ydCcgPgogICAgICAgICAgICAmbmJzcDsmbmJzcDsKICAgICAgICAgICAg6L+e5o6l5pWwOjxpbnB1dCB0eXBlPXRleHQgc2l6ZT04IG5hbWU9J2xpbWl0Jz4KICAgICAgICAgICAgJm5ic3A7Jm5ic3A7CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nQWRkJz4KICAgIDwvZm9ybT4KICAgIDwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K";
#endif
